package com.flink.hbase.sql2hdfs.udf;

import org.apache.flink.table.functions.ScalarFunction;

/**
 * 年龄组计算UDF
 * 根据年龄划分不同的年龄组
 */
public class AgeGroupUDF extends ScalarFunction {
    private static final long serialVersionUID = 1L;
    
    /**
     * 根据年龄计算年龄组
     * @param age 年龄
     * @return 年龄组
     */
    public String eval(Integer age) {
        if (age == null) {
            return "未知";
        }
        
        if (age < 0 || age > 120) {
            return "无效";
        }
        
        if (age < 18) {
            return "未成年";
        } else if (age < 25) {
            return "青年";
        } else if (age < 35) {
            return "青壮年";
        } else if (age < 45) {
            return "中青年";
        } else if (age < 55) {
            return "中年";
        } else if (age < 65) {
            return "中老年";
        } else {
            return "老年";
        }
    }
    
    /**
     * 根据年龄计算详细年龄组（5年为一组）
     * @param age 年龄
     * @return 详细年龄组
     */
    public String evalDetailed(Integer age) {
        if (age == null) {
            return "未知";
        }
        
        if (age < 0 || age > 120) {
            return "无效";
        }
        
        if (age < 18) {
            return "18岁以下";
        }
        
        // 以5年为一组
        int groupStart = (age / 5) * 5;
        int groupEnd = groupStart + 4;
        
        if (groupEnd > 100) {
            return "100岁以上";
        }
        
        return groupStart + "-" + groupEnd + "岁";
    }
    
    /**
     * 根据年龄计算工作年龄组
     * @param age 年龄
     * @return 工作年龄组
     */
    public String evalWorkGroup(Integer age) {
        if (age == null) {
            return "未知";
        }
        
        if (age < 18) {
            return "未达工作年龄";
        } else if (age < 25) {
            return "职场新人";
        } else if (age < 35) {
            return "职场精英";
        } else if (age < 45) {
            return "职场骨干";
        } else if (age < 55) {
            return "职场专家";
        } else if (age < 65) {
            return "职场顾问";
        } else {
            return "退休年龄";
        }
    }
    
    /**
     * 判断是否为黄金工作年龄
     * @param age 年龄
     * @return 是否为黄金工作年龄
     */
    public Boolean isGoldenAge(Integer age) {
        if (age == null) {
            return false;
        }
        return age >= 25 && age <= 45;
    }
} 